home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- * 疑似仮想記憶ライブラリ
- *************************************************************************/
-
- #ifndef _VM_H
- #define _VM_H
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
-
- #ifndef NORMAL
- # define NORMAL (0)
- #endif
- #ifndef ERR
- # define ERR (-1)
- #endif
- #ifndef TRUE
- # define TRUE (1)
- #endif
- #ifndef FALSE
- # define FALSE (0)
- #endif
-
- typedef struct _vmdat_t
- {
- struct _vmdat_t *next, *prev;
-
- size_t siz;
- void *ptr; /* NULL以外ならメモリ中 */
- long fpos; /* ファイル位置 */
- unsigned short lock; /* ロックカウント */
- char flgChg; /* 内容に変更があったか */
- char dmy_0;
- } VMDAT_T;
-
- typedef VMDAT_T * VMHDL_T;
-
- typedef struct _vmctrl_t
- {
- struct _vmctrl_t *next, *prev;
-
- unsigned int att; /* 属性 */
- unsigned int stt; /* ステータス */
-
- time_t time; /* アクセス時間チェック用 */
- size_t sizMax; /* 実メモリ中に確保できる大きさ */
- size_t sizUse; /* 確保されているサイズ */
- size_t sizMem; /* メモリ中に確保されているサイズ */
- size_t sizFil; /* ファイル中に確保されているサイズ */
-
- VMDAT_T *datTop;
- VMDAT_T *datLast;
- unsigned int cnt; /* アクセスカウンタ */
-
- size_t sizExt; /* ファイルサイズを拡張単位 */
- long fsizCrt; /* 現在のファイルサイズ */
- long fposTop;
- long fposLast;
-
- FILE *fp;
- int flgFile;
- char path[256];
- } VM_T;
-
- #define VMSTT_SWAP_IGNORE (0x0000_0001) /* スワップアウト禁止 */
- #define VMACT_OFF (0)
- #define VMACT_ON (1)
-
- extern VM_T *VmTop;
- extern unsigned int VmCd;
- extern int VmDrv; /* スワップアウト・ドライブ */
-
- extern int VM_init(void);
- extern void VM_term(void);
- extern void VM_sysPause(void);
- extern VM_T *VM_open(size_t sizMax);
- extern void VM_close(VM_T *vm);
- extern int VM_action( VM_T *vm, int act );
- extern VMHDL_T VM_hdlAlloc( VM_T *vm, size_t siz);
- extern void VM_hdlFree( VM_T *vm, VMHDL_T hdl);
- extern void *VM_inc( VM_T *vm, VMHDL_T hdl);
- extern void VM_dec( VM_T *vm, VMHDL_T hdl);
- extern int VM_swapOut( VM_T *vm, VMHDL_T hdl );
- extern int VM_modify( VM_T *vm, VMHDL_T hdl);
- extern int VM_access( VM_T *vm, VMHDL_T hdl );
-
- #define VM_INC(_vm,_hdl) ((_hdl)->ptr ? ((++(_hdl)->lock), (_hdl)->ptr) : VM_inc((_vm),(_hdl)))
- #define VM_DEC(_vm,_hdl) (--((_hdl)->lock))
-
- /* 高速版VM_modify() */
- #define VM_MODIFY(_vm,_hdl) { \
- if ( (_hdl)->ptr ) \
- { (_hdl)->flgChg = TRUE; \
- } else \
- { (_hdl)->flgChg = FALSE; \
- } \
- }
-
- #endif
-